package com.company.nuwa.redis.constants;

import lombok.AllArgsConstructor;
import lombok.Getter;
import org.springframework.core.io.ClassPathResource;
import org.springframework.data.redis.core.script.RedisScript;

/**
 * <p>redis 功能增强脚本</p >
 *
 * @author Nikola Tesla
 * @version 1.0
 * @date 2020/11/25 11:33
 */
@AllArgsConstructor
public enum RedisExtScript {

    /**
     *
     */
    INCR_WITH_TICKET(LuaScript.INCR_WITH_TICKET_SCRIPT, "依据 ticket 改变 整形 数值 的脚本"),

    LOAD_VAL_WITH_TICKET(LuaScript.LOAD_VAL_WITH_TICKET_SCRIPT, "加载值（带关联ticket） 的脚本"),

    STRING_KEY_INCREMENT_EXPIRE(LuaScript.STRING_KEY_INCREMENT_EXPIRE, "对String类型的key进行递增递减并设置过期值的原子脚本"),

    STRING_KEY_INCREMENT_EXPIRE_AT(LuaScript.STRING_KEY_INCREMENT_EXPIRE_AT, "对String类型的key进行递增递减并设置过期指定指定时间的原子脚本"),

    ;

    @Getter
    private final RedisScript<String> redisScript;
    @Getter
    private final String desc;

    /**
     * 脚本声明加载
     */
    public interface LuaScript {
        /**
         * 依据 ticket 改变 整形 数值 的脚本
         */
        RedisScript<String> INCR_WITH_TICKET_SCRIPT = RedisScript.of(new ClassPathResource("./lua/incrWithTicket.lua"), String.class);

        /**
         * 加载值（带关联ticket） 的脚本
         */
        RedisScript<String> LOAD_VAL_WITH_TICKET_SCRIPT = RedisScript.of(new ClassPathResource("./lua/loadValWithTicket.lua"), String.class);

        /**
         * 对String类型的key进行递增递减并设置过期值的原子脚本
         */
        RedisScript<String> STRING_KEY_INCREMENT_EXPIRE = RedisScript.of(new ClassPathResource("lua/stringIncrementExpire.lua"), String.class);

        /**
         * 对String类型的key进行递增递减并设置过期指定指定时间的原子脚本
         */
        RedisScript<String> STRING_KEY_INCREMENT_EXPIRE_AT = RedisScript.of(new ClassPathResource("lua/stringIncrementExpireAt.lua"), String.class);
    }


}
